//package cc.magicjson.example.demo.virtual;
//
//import net.jcip.annotations.ThreadSafe;
//
//import java.util.concurrent.*;
//import java.util.function.Function;
//import java.util.logging.Logger;
//
///**
// * 虚拟线程管理器
// * @author <a href="mailto:it_magicjson@163.com">MagicJson</a>
// */
//@ThreadSafe
//public enum VirtualThreadManager {
//
//    INSTANCE; // 单例实例
//
//    private static final Logger LOGGER = Logger.getLogger(VirtualThreadManager.class.getName());
//
//    // 默认的虚拟线程池
//    private ExecutorService executor;
//
//    // 构造函数，默认使用虚拟线程池
//    VirtualThreadManager() {
//        this.executor = Executors.newVirtualThreadPerTaskExecutor();
//    }
//
//    // 提供自定义的ExecutorService，若为空则使用默认
//    public void setExecutor(ExecutorService customExecutor) {
//        if (customExecutor != null) {
//            this.executor = customExecutor;
//        } else {
//            this.executor = Executors.newVirtualThreadPerTaskExecutor();
//        }
//    }
//
//    // 任务装饰器：增强任务的执行过程，加入日志和性能监控
//    private <T> Callable<T> decorateTask(Function<ThreadLocal<Object>, T> task, ThreadLocal<Object> threadLocal, Object localValue) {
//        return () -> {
//            long startTime = System.nanoTime();
//            threadLocal.set(localValue);
//            try {
//                LOGGER.info("开始执行虚拟线程任务");
//                T result = task.apply(threadLocal);
//                LOGGER.info("任务执行完成，结果: " + result);
//                return result;
//            } catch (Exception e) {
//                LOGGER.severe("任务执行失败: " + e.getMessage());
//                throw e;
//            } finally {
//                long elapsedTime = System.nanoTime() - startTime;
//                LOGGER.info("任务执行耗时: " + elapsedTime + " ns");
//                threadLocal.remove(); // 清理 ThreadLocal 防止内存泄漏
//            }
//        };
//    }
//
//    // 执行虚拟线程任务，并传递 ThreadLocal 上下文，返回 Future
//    public <T> Future<T> execute(Function<ThreadLocal<Object>, T> task, ThreadLocal<Object> threadLocal) {
//        Object localValue = threadLocal.get();
//        return executor.submit(decorateTask(task, threadLocal, localValue));
//    }
//
//    // 安全关闭线程池
//    public void shutdown() {
//        try {
//            executor.shutdown();
//            if (!executor.awaitTermination(60, TimeUnit.SECONDS)) {
//                executor.shutdownNow();
//            }
//        } catch (InterruptedException e) {
//            executor.shutdownNow();
//            Thread.currentThread().interrupt();
//        }
//    }
//
//    // 允许重启线程池
//    public void restart() {
//        if (executor.isShutdown()) {
//            this.executor = Executors.newVirtualThreadPerTaskExecutor();
//        }
//    }
//}
